﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Factory
{
    public partial class CadastrarCliente : Form
    {
        string erro = string.Empty;

        public CadastrarCliente()
        {
            InitializeComponent();
        }

        private void CadastrarCliente_Load(object sender, EventArgs e)
        {
            Utils.LimpaCampos(this);
            rdbFisica.Checked = true;
            rdbNormal.Checked = true;
        }

        private void btnVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
            MenuPrincipal menuprincipal = new MenuPrincipal();
            menuprincipal.Show();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
#warning Verificar o limite do cliente

            bool podeSalvar = VerificaCampos();

            if (podeSalvar)
            {
                ClienteDAO clienteDAO = new ClienteDAO();                  

              
                Cliente cliente = new Cliente(0, txtCPF.Text, Convert.ToDouble(txtLimiteAprovado.Text), txtNomeUsuario.Text,false
                   , rdbJuridica.Checked,0);

                int resultado = 0;

                resultado = clienteDAO.CadastrarCliente(cliente);

                if (resultado > 0)
                {
                    Utils.LimpaCampos(this);
                    MessageBox.Show("Cliente cadastrado com sucesso!");
                }

                else
                {
                    MessageBox.Show("Problemas ao cadastrar Cliente!");
                }
            }

            else
            {
                MessageBox.Show(erro);
            }
        }

        private bool VerificaCampos()
        {
            if (txtNomeUsuario.Text == string.Empty || txtCPF.Text == string.Empty || txtLimiteAprovado.Text == string.Empty
          || (rdbEspecial.Checked == false && rdbNormal.Checked == false) || (rdbFisica.Checked == false && rdbJuridica.Checked == false))
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("Os seguintes campos obrigatórios estão em branco: \n\n");
                sb.Append(txtNomeUsuario.Text == string.Empty ? "-Nome \n" : string.Empty);
                sb.Append(txtCPF.Text == string.Empty ? "-CPF \n" : string.Empty);
                sb.Append(txtLimiteAprovado.Text == string.Empty ? "-Limite Aprovado \n" : string.Empty);
                sb.Append(rdbEspecial.Checked == false && rdbNormal.Checked == false ? "-Perfil \n" : string.Empty);
                sb.Append(rdbFisica.Checked == false && rdbJuridica.Checked == false ? "-Pessoa \n" : string.Empty);

                erro = sb.ToString();

                return false;
            }

            else
            {
                RegraDAO regraDAO = new RegraDAO();
                Regra regra = regraDAO.ObterRegras();
                double porcentagemEmprestimo = regra.PorcentagemEmprestimo;

                FactoryDAO factoryDAO = new FactoryDAO();
                FactoryE factory = factoryDAO.obterDadosFactory();

                //Calcula quanto sera o valor que a factory podera emprestar
                double valoraemprestar = ((factory.valorAtual / 100) * porcentagemEmprestimo);

                double porcentagemlimite = 0;
                if (rdbNormal.Checked == true)
                {
                    porcentagemlimite = regra.LimiteFactoryClienteComum;
                }
                else {
                    porcentagemlimite = regra.LimiteFactoryClienteEspecial;
                }

                double valoraemprestarcomporcentagem = ((valoraemprestar / 100) * porcentagemlimite);

                double limite = Convert.ToDouble(txtLimiteAprovado.Text);
                if (limite > valoraemprestarcomporcentagem)
                {
                    erro = "O limite do cliente está acima do permitido, tente outro valor!";
                    return false;
                }
                else
                {
                    return true;
                }

            }

        }


        protected override bool ProcessCmdKey(ref Message message, Keys keys)
        {
            switch (keys)
            {
                case Keys.Escape:
                    //Process action here.
                    MenuPrincipal menu = new MenuPrincipal();
                    menu.Show();
                    this.Hide();
                    return false;
            }

            return false;
        }

        private void rdbJuridica_CheckedChanged(object sender, EventArgs e)
        {

            if (rdbJuridica.Checked == true)
            {
                lblCPF.Text = "CNPJ";
                txtCPF.Mask = "00,000,000/0000-00";
                rdbFisica.Checked = false;
            }
        }

        private void rdbFisica_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbFisica.Checked == true)
            {
                lblCPF.Text = "CPF";
                txtCPF.Mask = "000,000,000-00";
                rdbJuridica.Checked = false;
            }
        }

    }
}
